package awk.jdk8;

import awk.thread.ThreadPoolUtils;

import java.util.concurrent.ThreadPoolExecutor;

/*
 * 模拟 CAS 算法
 */
public class CompareAndSwap {
    private int value;
    public synchronized int get() {
        return value;
    }
    //比较
    private synchronized int compareAndSwap(int expectedValue, int newValue) {
        int oldValue = value;
        if (oldValue == expectedValue) {
            this.value = newValue;
        }
        return oldValue;
    }

    //设置
    public synchronized boolean compareAndSet(int expectedValue, int newValue) {
        //由一个synchronized 方法调用另一个synchronized方法,可重入锁.
        return expectedValue == compareAndSwap(expectedValue, newValue);
    }



    public static void main(String[] args) {
        final CompareAndSwap cas = new CompareAndSwap();
        ThreadPoolExecutor pool = ThreadPoolUtils.getPool();
        pool.execute(() -> {
            int expectedValue = cas.get();
            boolean b = cas.compareAndSet(expectedValue, (int)(Math.random() * 101));
            System.out.println(b);
        });
    }

}

